def test_uav_battery_capacity(env, hover_time=2.0, offload_rate=0.5):
    """
    测试无人机电池容量设置的合理性
    让无人机机械地执行"感知"动作，直到电量耗尽
    返回能够完成的任务(PoI)数量
    """
    print("=== 开始无人机电池容量测试 ===")
    print(f"测试参数: 悬停时间={hover_time}, 卸载率={offload_rate}")
    print(f"初始电量: {env.uav_energy:.1f}/{env.uav_max_energy:.1f}")

    # 重置环境但保持POI位置不变
    env.reset()
    # 确保所有POI都未访问
    env.poi_visited = np.zeros(env.num_pois, dtype=bool)

    poi_count = 0
    step_details_log = []

    # 机械地访问每个POI，直到电量耗尽或所有POI访问完毕
    while env.uav_energy > 0 and not np.all(env.poi_visited):
        # 找到最近的未访问POI
        unvisited_pois = np.where(~env.poi_visited)[0]
        if len(unvisited_pois) == 0:
            break

        distances_to_pois = {i: np.linalg.norm(env.uav_pos - env.pois[i]) for i in unvisited_pois}
        nearest_poi_idx = min(distances_to_pois, key=distances_to_pois.get)

        # 构建一个固定的"感知"动作
        action = {
            'high_level_choice': 0,  # 感知动作
            'low_level_params': np.array([hover_time, offload_rate])
        }

        # 记录当前状态
        prev_energy = env.uav_energy
        prev_poi_status = np.sum(env.poi_visited)

        # 执行动作
        state, reward, done, info = env.step(action)

        # 记录执行后的状态
        current_poi_status = np.sum(env.poi_visited)
        energy_consumed = prev_energy - env.uav_energy

        # 如果成功访问了一个新的POI
        if current_poi_status > prev_poi_status:
            poi_count += 1
            print(f"成功访问第 {poi_count} 个POI, 消耗能量: {energy_consumed:.2f}, 剩余能量: {env.uav_energy:.2f}")

        # 记录详细信息
        step_details_log.append({
            'poi_index': nearest_poi_idx,
            'energy_consumed': energy_consumed,
            'remaining_energy': env.uav_energy,
            'distance_flown': distances_to_pois[nearest_poi_idx],
            'step_details': info['step_details'].copy()
        })

        if done:
            break

    print(f"\n测试结果:")
    print(f"无人机在电量耗尽前成功访问了 {poi_count} 个POI (总共 {env.num_pois} 个POI)")
    print(f"剩余电量: {env.uav_energy:.2f}")

    # 分析结果并提供建议
    if poi_count <= 2:
        print("❌ 电池容量过小: 无人机无法完成基本任务，建议显著增加电池容量")
    elif poi_count == 3:
        print("⚠️ 电池容量偏小: 无人机只能完成少量任务，建议适当增加电池容量")
    elif 4 <= poi_count <= 5:
        print("✅ 电池容量适中: 无人机需要充电才能完成所有任务，这是理想设置")
    elif poi_count == 6:
        print("⚠️ 电池容量偏大: 无人机几乎不需要充电，建议适当减少电池容量")
    else:
        print("❌ 电池容量过大: 无人机无需充电即可完成所有任务，建议显著减少电池容量")

    # 计算平均每次任务的能耗
    if poi_count > 0:
        total_energy_used = env.uav_max_energy - env.uav_energy
        avg_energy_per_mission = total_energy_used / poi_count
        print(f"平均每次任务能耗: {avg_energy_per_mission:.2f}")

        # 估算完成所有任务所需的总能量
        estimated_total_energy = avg_energy_per_mission * env.num_pois
        recommended_capacity = estimated_total_energy * 0.7  # 设置为总需求的70%

        print(f"完成所有任务估算总能耗: {estimated_total_energy:.2f}")
        print(f"推荐电池容量: {recommended_capacity:.2f} (当前: {env.uav_max_energy:.2f})")

    print("=== 测试结束 ===\n")
    return poi_count, step_details_log


# 在主函数中添加测试调用
if __name__ == '__main__':
    # ... 原有的代码 ...

    # 在创建环境后添加电池容量测试
    env = UAV_MEC_Env()

    # 测试当前电池容量设置
    test_uav_battery_capacity(env)

    # 如果需要测试不同参数，可以这样调用
    # test_uav_battery_capacity(env, hover_time=1.5, offload_rate=0.3)
    # test_uav_battery_capacity(env, hover_time=2.5, offload_rate=0.7)

    # ... 原有的训练代码 ...